<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Object</title>
</head>

<body>
    for ... in ... 遍历对象，返回对象的每一个属性；
    Object.keys() 遍历对象，并返回一个数组，数组的元素由对象的每个属性构成；
    Object.values() 遍历对象，并返回一个数组，数组的每一个元素由对象的属性值组成；
    Object.entries() 遍历对象，并返回一个数组，数组的每一个元素是由对象的属性以及属性值组成的数组；
    Object.assign() 复制并克隆对象，并返回合并后的对象，如果是多个对象参数，那么相同的属性，后边的属性值会覆盖前边的属性值；
    Object.create() 对象的创建12；
    Object.prototype.hasOwnProperty(prop) 返回是否是目标对象上的属性，是返回 true, 否则返回 false1；
    Object.defineProperty() 给对象添加一个属性并指定该属性的配置；
    Object.defineProperties() 给对象添加多个属性并分别指定它们的配置
</body>
<script>
    let arr1 = ["a", "b", "c"];
    let obj1 = { name: "nanfeng", tel: 15252345524 }

    // 1.Object.keys将数组或对象的键拿出来 返回数组
    console.log(Object.keys(arr1));  // [0,1,2]
    console.log(Object.keys(obj1));  // ["name","tel"]

    // 2.Object.keys将数组或对象的值拿出来 返回数组
    console.log(Object.values(arr1));  // ["a", "b", "c"]
    console.log(Object.values(obj1));  // [""nanfeng"",15252345524]

    //3.assign Object.assign( target, source, source1 ) 方法用于对象的合并，将源对象（source）的所有可枚举属性，复制到目标对象（target）。拷贝的属性是有限制的，只拷贝源对象的自身属性（不拷贝继承属性），也不拷贝不可枚举的属性（enumerable: false）
    // const obj2 = { name: "lanting", tel: 15252345524 }
    // const data2 = Object.assign({}, obj2)
    // console.log("object.assign浅拷贝", data2);
    // obj2.name = "mortal"
    // console.log("object.assign浅拷贝", obj2, data2);

    // assign 浅拷贝
    const obj3 = { a: { b: 1 } };
    const obj4 = Object.assign({}, obj3);
    obj3.a.b = 2;
    console.log(obj4.a.b) //2
    obj4.a.b = 3
    console.log(obj3.a.b) //3

    // 4 for in 遍历对象和对象
    for (var key in obj1) {
        console.log(obj1[key]);
    }
    for (var key in arr1) {
        console.log(arr1[key]);
    }

</script>


</html>